3Dã¬ã³ããªã³ã°ãã€ãã©ã€ã³ã«ãããé ç¹ã·ã§ãŒããŒãšãã©ã°ã¡ã³ãã·ã§ãŒããŒã®è©³çްãªè§£èª¬ãã°ããŒãã«ãªéçºè åãã®æŠå¿µãæè¡ãå®çšçãªã¢ããªã±ãŒã·ã§ã³ãç¶²çŸ ã
3Dã¬ã³ããªã³ã°ãã€ãã©ã€ã³ïŒé ç¹ã·ã§ãŒããŒãšãã©ã°ã¡ã³ãã·ã§ãŒããŒã®ç¿åŸ
3Dã¬ã³ããªã³ã°ãã€ãã©ã€ã³ã¯ããããªã²ãŒã ã建ç¯å¯èŠåããç§åŠã·ãã¥ã¬ãŒã·ã§ã³ãç£æ¥ãã¶ã€ã³ãœãããŠã§ã¢ãŸã§ã3Dã°ã©ãã£ãã¯ã¹ã衚瀺ããããããã¢ããªã±ãŒã·ã§ã³ã®ããã¯ããŒã³ã§ãããã®è€éããçè§£ããããšã¯ãé«å質ã§é«æ§èœãªããžã¥ã¢ã«ãå®çŸãããéçºè ã«ãšã£ãŠäžå¯æ¬ ã§ãããã®ãã€ãã©ã€ã³ã®äžå¿ã«ã¯ãé ç¹ã·ã§ãŒããŒãšãã©ã°ã¡ã³ãã·ã§ãŒããŒãããããããã¯ããžãªã¡ããªãšãã¯ã»ã«ã®åŠçæ¹æ³ã现ããå¶åŸ¡ã§ããããã°ã©ã å¯èœãªã¹ããŒãžã§ãããã®èšäºã§ã¯ããããã®ã·ã§ãŒããŒã«ã€ããŠå æ¬çã«è§£èª¬ãããã®åœ¹å²ãæ©èœãããã³å®çšçãªã¢ããªã±ãŒã·ã§ã³ãåãäžããŸãã
3Dã¬ã³ããªã³ã°ãã€ãã©ã€ã³ã®çè§£
é ç¹ã·ã§ãŒããŒãšãã©ã°ã¡ã³ãã·ã§ãŒããŒã®è©³çްã«å ¥ãåã«ã3Dã¬ã³ããªã³ã°ãã€ãã©ã€ã³å šäœã®ç¢ºããªçè§£ãæã€ããšãäžå¯æ¬ ã§ãããã€ãã©ã€ã³ã¯ã倧ããåããŠããã€ãã®ã¹ããŒãžã«åããããŸãã
- å ¥åã¢ã»ã³ããªïŒã¡ã¢ãªããé ç¹ããŒã¿ïŒäœçœ®ãæ³ç·ããã¯ã¹ãã£åº§æšãªã©ïŒãåéããããªããã£ãïŒäžè§åœ¢ãç·ãç¹ïŒã«çµã¿ç«ãŠãŸãã
- é ç¹ã·ã§ãŒããŒïŒåé ç¹ãåŠçãã倿ãã©ã€ãã£ã³ã°èšç®ããã®ä»ã®é ç¹åºæã®æäœãå®è¡ããŸãã
- ãžãªã¡ããªã·ã§ãŒããŒïŒãªãã·ã§ã³ïŒïŒãžãªã¡ããªãäœæãŸãã¯ç Žæ£ã§ããŸãããã®ã¹ããŒãžã¯åžžã«äœ¿çšãããããã§ã¯ãããŸããããæ°ããããªããã£ãããã®å Žã§çæããããã®åŒ·åãªæ©èœãæäŸããŸãã
- ã¯ãªããã³ã°ïŒãã¥ãŒãã©ã¹ã¿ã ïŒã«ã¡ã©ã«è¡šç€ºããã空éé åïŒå€ã«ããããªããã£ããç Žæ£ããŸãã
- ã©ã¹ã¿ã©ã€ãºïŒããªããã£ãããã©ã°ã¡ã³ãïŒæœåšçãªãã¯ã»ã«ïŒã«å€æããŸããããã«ã¯ãããªããã£ãã®è¡šé¢å šäœã«é ç¹å±æ§ãè£éããããšãå«ãŸããŸãã
- ãã©ã°ã¡ã³ãã·ã§ãŒããŒïŒåãã©ã°ã¡ã³ããåŠçãããã®æçµçãªè²ã決å®ããŸããããã¯ããã¯ã¹ãã£ãªã³ã°ãã·ã§ãŒãã£ã³ã°ãã©ã€ãã£ã³ã°ãªã©ã®ãã¯ã»ã«åºæã®ãšãã§ã¯ããé©çšãããå Žæã§ãã
- åºåããŒãžïŒæ·±åºŠãã¹ãããã¬ã³ããã¢ã«ãã¡åæãªã©ã®èŠçŽ ãèæ ®ããŠããã©ã°ã¡ã³ãã®è²ããã¬ãŒã ãããã¡ã®æ¢åã®å 容ãšçµã¿åãããŸãã
é ç¹ã·ã§ãŒããŒãšãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ãéçºè ãã¬ã³ããªã³ã°ããã»ã¹ãæãçŽæ¥çã«å¶åŸ¡ã§ããã¹ããŒãžã§ããã«ã¹ã¿ã ã·ã§ãŒããŒã³ãŒããèšè¿°ããããšã«ãããå¹ åºãèŠèŠå¹æãšæé©åãå®è£ ã§ããŸãã
é ç¹ã·ã§ãŒããŒïŒãžãªã¡ããªã®å€æ
é ç¹ã·ã§ãŒããŒã¯ããã€ãã©ã€ã³ã®æåã®ããã°ã©ã å¯èœãªã¹ããŒãžã§ãããã®äž»ãªåœ¹å²ã¯ãå ¥åãžãªã¡ããªã®åé ç¹ãåŠçããããšã§ããããã«ã¯éåžžãæ¬¡ã®ãã®ãå«ãŸããŸãã
- ã¢ãã«ãã¥ãŒãããžã§ã¯ã·ã§ã³å€æïŒé ç¹ããªããžã§ã¯ã空éããã¯ãŒã«ã空éãæ¬¡ã«ãã¥ãŒç©ºéïŒã«ã¡ã©ç©ºéïŒãæåŸã«ã¯ãªãã空éã«å€æããŸãããã®å€æã¯ãã·ãŒã³å ã§ãžãªã¡ããªãæ£ããé 眮ããããã«äžå¯æ¬ ã§ããäžè¬çãªã¢ãããŒãã¯ãé ç¹äœçœ®ã«ã¢ãã«ãã¥ãŒãããžã§ã¯ã·ã§ã³ïŒMVPïŒè¡åãä¹ç®ããããšã§ãã
- æ³ç·å€æïŒé ç¹æ³ç·ãã¯ãã«ã倿ããŠã倿åŸã衚é¢ã«åçŽãªãŸãŸã§ããããšã確èªããŸããããã¯ãã©ã€ãã£ã³ã°èšç®ã«ãšã£ãŠç¹ã«éèŠã§ãã
- 屿§èšç®ïŒãã¯ã¹ãã£åº§æšãè²ãæ¥ç·ãã¯ãã«ãªã©ãä»ã®é ç¹å±æ§ãèšç®ãŸãã¯å€æŽããŸãããããã®å±æ§ã¯ãããªããã£ãã®è¡šé¢å šäœã«è£éããããã©ã°ã¡ã³ãã·ã§ãŒããŒã«æž¡ãããŸãã
é ç¹ã·ã§ãŒããŒã®å ¥åãšåºå
é ç¹ã·ã§ãŒããŒã¯ãé ç¹å±æ§ãå ¥åãšããŠåãåãã倿ãããé ç¹å±æ§ãåºåãšããŠçæããŸããç¹å®ã®å ¥åãšåºåã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŒãºã«ãã£ãŠç°ãªããŸãããäžè¬çãªå ¥åã«ã¯æ¬¡ã®ãããªãã®ããããŸãã
- äœçœ®ïŒãªããžã§ã¯ã空éå ã®é ç¹äœçœ®ã
- æ³ç·ïŒé ç¹æ³ç·ãã¯ãã«ã
- ãã¯ã¹ãã£åº§æšïŒãã¯ã¹ãã£ããµã³ããªã³ã°ããããã®ãã¯ã¹ãã£åº§æšã
- è²ïŒé ç¹ã®è²ã
é ç¹ã·ã§ãŒããŒã¯ãã¯ãªãã空éå ã®å€æãããé ç¹äœçœ®ãå°ãªããšãåºåããå¿ èŠããããŸãããã®ä»ã®åºåã«ã¯ã次ã®ãããªãã®ããããŸãã
- 倿ãããæ³ç·ïŒå€æãããé ç¹æ³ç·ãã¯ãã«ã
- ãã¯ã¹ãã£åº§æšïŒå€æŽãŸãã¯èšç®ããããã¯ã¹ãã£åº§æšã
- è²ïŒå€æŽãŸãã¯èšç®ãããé ç¹ã®è²ã
é ç¹ã·ã§ãŒããŒã®äŸïŒGLSLïŒ
GLSLïŒOpenGL Shading LanguageïŒã§èšè¿°ãããé ç¹ã·ã§ãŒããŒã®ç°¡åãªäŸã次ã«ç€ºããŸãã
#version 330 core
layout (location = 0) in vec3 aPos; // é ç¹äœçœ®
layout (location = 1) in vec3 aNormal; // é ç¹æ³ç·
layout (location = 2) in vec2 aTexCoord; // ãã¯ã¹ãã£åº§æš
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
out vec3 Normal;
out vec2 TexCoord;
out vec3 FragPos;
void main()
{
FragPos = vec3(model * vec4(aPos, 1.0));
Normal = mat3(transpose(inverse(model))) * aNormal;
TexCoord = aTexCoord;
gl_Position = projection * view * model * vec4(aPos, 1.0);
}
ãã®ã·ã§ãŒããŒã¯ãé ç¹äœçœ®ãæ³ç·ãããã³ãã¯ã¹ãã£åº§æšãå ¥åãšããŠåãåããŸããã¢ãã«ãã¥ãŒãããžã§ã¯ã·ã§ã³è¡åã䜿çšããŠäœçœ®ã倿ãã倿ãããæ³ç·ãšãã¯ã¹ãã£åº§æšããã©ã°ã¡ã³ãã·ã§ãŒããŒã«æž¡ããŸãã
é ç¹ã·ã§ãŒããŒã®å®çšçãªã¢ããªã±ãŒã·ã§ã³
é ç¹ã·ã§ãŒããŒã¯ã次ã®ãããªå¹ åºããšãã§ã¯ãã«äœ¿çšãããŸãã
- ã¹ããã³ã°ïŒè€æ°ã®ããŒã³å€æããã¬ã³ãããŠããã£ã©ã¯ã¿ãŒãã¢ãã¡ãŒã·ã§ã³åããŸããããã¯ããããªã²ãŒã ããã£ã©ã¯ã¿ãŒã¢ãã¡ãŒã·ã§ã³ãœãããŠã§ã¢ã§äžè¬çã«äœ¿çšãããŠããŸãã
- å€äœãããã³ã°ïŒãã¯ã¹ãã£ã«åºã¥ããŠé ç¹ãå€äœããã衚é¢ã«çްéšã远å ããŸãã
- ã€ã³ã¹ã¿ã³ã¹åïŒåããªããžã§ã¯ãã®è€æ°ã®ã³ããŒãç°ãªã倿ã§ã¬ã³ããªã³ã°ããŸããããã¯ãæ£®ã®æšãççºã®ç²åãªã©ã倿°ã®é¡äŒŒãããªããžã§ã¯ããã¬ã³ããªã³ã°ããå Žåã«éåžžã«åœ¹ç«ã¡ãŸãã
- æç¶ãåãžãªã¡ããªçæïŒæ°Žã·ãã¥ã¬ãŒã·ã§ã³ã®æ³¢ãªã©ããžãªã¡ããªããã®å Žã§çæããŸãã
- å°åœ¢å€åœ¢ïŒãŠãŒã¶ãŒå ¥åãŸãã¯ã²ãŒã ã€ãã³ãã«åºã¥ããŠå°åœ¢ãžãªã¡ããªã倿ŽããŸãã
ãã©ã°ã¡ã³ãã·ã§ãŒããŒïŒãã¯ã»ã«ã®è²ä»ã
ãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ããã¯ã»ã«ã·ã§ãŒããŒãšãåŒã°ãããã€ãã©ã€ã³ã®2çªç®ã®ããã°ã©ã å¯èœãªã¹ããŒãžã§ãããã®äž»ãªåœ¹å²ã¯ãåãã©ã°ã¡ã³ãïŒæœåšçãªãã¯ã»ã«ïŒã®æçµçãªè²ã決å®ããããšã§ããããã«ã¯ã次ã®ãããªãã®ãå«ãŸããŸãã
- ãã¯ã¹ãã£ãªã³ã°ïŒãã¯ã¹ãã£ããµã³ããªã³ã°ããŠããã©ã°ã¡ã³ãã®è²ã決å®ããŸãã
- ã©ã€ãã£ã³ã°ïŒããŸããŸãªå æºããã®ã©ã€ãã£ã³ã°ã®å¯äžãèšç®ããŸãã
- ã·ã§ãŒãã£ã³ã°ïŒã·ã§ãŒãã£ã³ã°ã¢ãã«ãé©çšããŠãå ãšè¡šé¢ã®çžäºäœçšãã·ãã¥ã¬ãŒãããŸãã
- ãã¹ãããã»ã¹ãšãã§ã¯ãïŒãŒãããã·ã£ãŒãåãè²è£æ£ãªã©ã®ãšãã§ã¯ããé©çšããŸãã
ãã©ã°ã¡ã³ãã·ã§ãŒããŒã®å ¥åãšåºå
ãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ãé ç¹ã·ã§ãŒããŒããè£éãããé ç¹å±æ§ãå ¥åãšããŠåãåããæçµçãªãã©ã°ã¡ã³ãè²ãåºåãšããŠçæããŸããç¹å®ã®å ¥åãšåºåã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŒãºã«ãã£ãŠç°ãªããŸãããäžè¬çãªå ¥åã«ã¯æ¬¡ã®ãããªãã®ããããŸãã
- è£éãããäœçœ®ïŒã¯ãŒã«ã空éãŸãã¯ãã¥ãŒç©ºéå ã®è£éãããé ç¹äœçœ®ã
- è£éãããæ³ç·ïŒè£éãããé ç¹æ³ç·ãã¯ãã«ã
- è£éããããã¯ã¹ãã£åº§æšïŒè£éããããã¯ã¹ãã£åº§æšã
- è£éãããè²ïŒè£éãããé ç¹ã®è²ã
ãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ãæçµçãªãã©ã°ã¡ã³ãè²ããéåžžã¯RGBAå€ïŒèµ€ãç·ãéãã¢ã«ãã¡ïŒãšããŠåºåããå¿ èŠããããŸãã
ãã©ã°ã¡ã³ãã·ã§ãŒããŒã®äŸïŒGLSLïŒ
GLSLã§èšè¿°ããããã©ã°ã¡ã³ãã·ã§ãŒããŒã®ç°¡åãªäŸã次ã«ç€ºããŸãã
#version 330 core
out vec4 FragColor;
in vec3 Normal;
in vec2 TexCoord;
in vec3 FragPos;
uniform sampler2D texture1;
uniform vec3 lightPos;
uniform vec3 viewPos;
void main()
{
// ã¢ã³ããšã³ã
float ambientStrength = 0.1;
vec3 ambient = ambientStrength * vec3(1.0, 1.0, 1.0);
// ãã£ãã¥ãŒãº
vec3 norm = normalize(Normal);
vec3 lightDir = normalize(lightPos - FragPos);
float diff = max(dot(norm, lightDir), 0.0);
vec3 diffuse = diff * vec3(1.0, 1.0, 1.0);
// ã¹ããã¥ã©ãŒ
float specularStrength = 0.5;
vec3 viewDir = normalize(viewPos - FragPos);
vec3 reflectDir = reflect(-lightDir, norm);
float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);
vec3 specular = specularStrength * spec * vec3(1.0, 1.0, 1.0);
vec3 result = (ambient + diffuse + specular) * texture(texture1, TexCoord).rgb;
FragColor = vec4(result, 1.0);
}
ãã®ã·ã§ãŒããŒã¯ãè£éãããæ³ç·ããã¯ã¹ãã£åº§æšããã©ã°ã¡ã³ãäœçœ®ãå ¥åãšããŠåãåãããã¯ã¹ãã£ãµã³ãã©ãŒãšã©ã€ãäœçœ®ãåãåããŸããåçŽãªã¢ã³ããšã³ãããã£ãã¥ãŒãºãããã³ã¹ããã¥ã©ãŒã¢ãã«ã䜿çšããŠã©ã€ãã£ã³ã°ã®å¯äžãèšç®ãããã¯ã¹ãã£ããµã³ããªã³ã°ããã©ã€ãã£ã³ã°ãšãã¯ã¹ãã£ã®è²ãçµã¿åãããŠæçµçãªãã©ã°ã¡ã³ãè²ãçæããŸãã
ãã©ã°ã¡ã³ãã·ã§ãŒããŒã®å®çšçãªã¢ããªã±ãŒã·ã§ã³
ãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ã次ã®ãããªéåžžã«å¹ åºããšãã§ã¯ãã«äœ¿çšãããŸãã
- ãã¯ã¹ãã£ãªã³ã°ïŒè©³çްãšãªã¢ãªãºã ã远å ããããã«ã衚é¢ã«ãã¯ã¹ãã£ãé©çšããŸããããã«ã¯ããã£ãã¥ãŒãºãããã³ã°ãã¹ããã¥ã©ãŒãããã³ã°ãæ³ç·ãããã³ã°ãèŠå·®ãããã³ã°ãªã©ã®ææ³ãå«ãŸããŸãã
- ã©ã€ãã£ã³ã°ãšã·ã§ãŒãã£ã³ã°ïŒPhongã·ã§ãŒãã£ã³ã°ãBlinn-Phongã·ã§ãŒãã£ã³ã°ãç©çããŒã¹ã¬ã³ããªã³ã°ïŒPBRïŒãªã©ãããŸããŸãªã©ã€ãã£ã³ã°ããã³ã·ã§ãŒãã£ã³ã°ã¢ãã«ãå®è£ ããŸãã
- ã·ã£ããŠãããã³ã°ïŒã©ã€ãã®èŠç¹ããã·ãŒã³ãã¬ã³ããªã³ã°ããæ·±åºŠå€ãæ¯èŒããŠã·ã£ããŠãäœæããŸãã
- ãã¹ãããã»ã¹ãšãã§ã¯ãïŒãŒãããã·ã£ãŒãåãè²è£æ£ããã«ãŒã ã被åçæ·±åºŠãªã©ã®ãšãã§ã¯ããé©çšããŸãã
- ãããªã¢ã«ããããã£ïŒãªããžã§ã¯ãã®ãããªã¢ã«ããããã£ïŒè²ãåå°çãç²ããªã©ïŒãå®çŸ©ããŸãã
- 倧æ°å¹æïŒãã©ã°ããã€ãºãé²ãªã©ã®å€§æ°å¹æãã·ãã¥ã¬ãŒãããŸãã
ã·ã§ãŒããŒèšèªïŒGLSLãHLSLãããã³Metal
é ç¹ã·ã§ãŒããŒãšãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ãéåžžãç¹æ®ãªã·ã§ãŒãã£ã³ã°èšèªã§èšè¿°ãããŸããæãäžè¬çãªã·ã§ãŒãã£ã³ã°èšèªã¯æ¬¡ã®ãšããã§ãã
- GLSLïŒOpenGL Shading LanguageïŒïŒOpenGLã§äœ¿çšãããŸããGLSLã¯Cèšèªã®ãããªèšèªã§ãããã°ã©ãã£ãã¯ã¹æäœãå®è¡ããããã®å¹ åºãçµã¿èŸŒã¿é¢æ°ãæäŸããŸãã
- HLSLïŒHigh-Level Shading LanguageïŒïŒDirectXã§äœ¿çšãããŸããHLSLãCèšèªã®ãããªèšèªã§ãããGLSLãšéåžžã«ãã䌌ãŠããŸãã
- Metal Shading LanguageïŒAppleã®Metalãã¬ãŒã ã¯ãŒã¯ã§äœ¿çšãããŸããMetal Shading Languageã¯C++14ã«åºã¥ããŠãããGPUãžã®äœã¬ãã«ã¢ã¯ã»ã¹ãæäŸããŸãã
ãããã®èšèªã¯ãã°ã©ãã£ãã¯ã¹ããã°ã©ãã³ã°å°çšã«èšèšãããããŒã¿åãå¶åŸ¡ãããŒæãããã³çµã¿èŸŒã¿é¢æ°ã®ã»ãããæäŸããŸãããããã®èšèªã®1ã€ãåŠç¿ããããšã¯ãã«ã¹ã¿ã ã·ã§ãŒããŒãšãã§ã¯ããäœæããããã¹ãŠã®éçºè ã«ãšã£ãŠäžå¯æ¬ ã§ãã
ã·ã§ãŒããŒããã©ãŒãã³ã¹ã®æé©å
ã¹ã ãŒãºã§å¿çæ§ã®é«ãã°ã©ãã£ãã¯ã¹ãå®çŸããã«ã¯ãã·ã§ãŒããŒã®ããã©ãŒãã³ã¹ãäžå¯æ¬ ã§ããã·ã§ãŒããŒã®ããã©ãŒãã³ã¹ãæé©åããããã®ãã³ããæ¬¡ã«ç€ºããŸãã
- ãã¯ã¹ãã£ã«ãã¯ã¢ãããæå°éã«æããïŒãã¯ã¹ãã£ã«ãã¯ã¢ããã¯æ¯èŒçã³ã¹ãã®ãããæäœã§ããå€ãäºåã«èšç®ããããããåçŽãªãã¯ã¹ãã£ã䜿çšãããããŠããã¯ã¹ãã£ã«ãã¯ã¢ããã®æ°ãæžãããŸãã
- äœç²ŸåºŠããŒã¿åã䜿çšããïŒå¯èœãªå Žåã¯ãäœç²ŸåºŠããŒã¿åïŒ`float32`ã®ä»£ããã«`float16`ãªã©ïŒã䜿çšããŸããããäœã粟床ã¯ãç¹ã«ã¢ãã€ã«ããã€ã¹ã§ãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã
- è€éãªå¶åŸ¡ãããŒãé¿ããïŒè€éãªå¶åŸ¡ãããŒïŒã«ãŒããåå²ãªã©ïŒã¯GPUã忢ãããå¯èœæ§ããããŸããå¶åŸ¡ãããŒãç°¡çŽ åãããã代ããã«ãã¯ãã«åãããæäœã䜿çšããŠãã ããã
- ç®è¡æŒç®ãæé©åããïŒæé©åãããæ°åŠé¢æ°ã䜿çšããäžèŠãªèšç®ãé¿ããŠãã ããã
- ã·ã§ãŒããŒããããã¡ã€ã«ããïŒãããã¡ã€ãªã³ã°ããŒã«ã䜿çšããŠãã·ã§ãŒããŒã®ããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããŸããã»ãšãã©ã®ã°ã©ãã£ãã¯ã¹APIã¯ãã·ã§ãŒããŒã®ããã©ãŒãã³ã¹ãçè§£ããã®ã«åœ¹ç«ã€ãããã¡ã€ãªã³ã°ããŒã«ãæäŸããŠããŸãã
- ã·ã§ãŒããŒããªã¢ã³ããæ€èšããïŒããŸããŸãªå質èšå®ã«ã€ããŠã¯ãç°ãªãã·ã§ãŒããŒããªã¢ã³ãã䜿çšããŸããäœèšå®ã®å Žåã¯ãåçŽã§é«éãªã·ã§ãŒããŒã䜿çšããŸããé«èšå®ã®å Žåã¯ãããè€éã§è©³çްãªã·ã§ãŒããŒã䜿çšããŸããããã«ãããããã©ãŒãã³ã¹ãšèŠèŠå質ããã¬ãŒããªãã§ããŸãã
ã¯ãã¹ãã©ãããã©ãŒã ã®èæ ®äºé
è€æ°ã®ãã©ãããã©ãŒã åãã«3Dã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåã¯ãã·ã§ãŒããŒèšèªãšããŒããŠã§ã¢æ©èœã®éããèæ ®ããããšãéèŠã§ããGLSLãšHLSLã¯äŒŒãŠããŸãããäºææ§ã®åé¡ãåŒãèµ·ããå¯èœæ§ã®ãã埮åŠãªéãããããŸããAppleãã©ãããã©ãŒã ã«åºæã®Metal Shading Languageã§ã¯ãåå¥ã®ã·ã§ãŒããŒãå¿ èŠã§ããã¯ãã¹ãã©ãããã©ãŒã ã·ã§ãŒããŒéçºã®ããã®æŠç¥ã«ã¯ã次ã®ãããªãã®ããããŸãã
- ã¯ãã¹ãã©ãããã©ãŒã ã·ã§ãŒããŒã³ã³ãã€ã©ã®å©çšïŒSPIRV-Crossã®ãããªããŒã«ã¯ãããŸããŸãªã·ã§ãŒãã£ã³ã°èšèªéã§ã·ã§ãŒããŒã倿ã§ããŸããããã«ããã1ã€ã®èšèªã§ã·ã§ãŒããŒãèšè¿°ããã¿ãŒã²ãããã©ãããã©ãŒã ã®èšèªã«ã³ã³ãã€ã«ã§ããŸãã
- ã·ã§ãŒããŒãã¬ãŒã ã¯ãŒã¯ã®äœ¿çšïŒUnityãUnreal Engineãªã©ã®ãã¬ãŒã ã¯ãŒã¯ã¯ãåºç€ãšãªããã©ãããã©ãŒã ã®éããæœè±¡åããç¬èªã®ã·ã§ãŒããŒèšèªãšãã«ãã·ã¹ãã ãæäŸããŸãã
- åãã©ãããã©ãŒã ã®åå¥ã®ã·ã§ãŒããŒã®èšè¿°ïŒããã¯æãæéã®ãããã¢ãããŒãã§ãããã·ã§ãŒããŒã®æé©åãæå€§éã«å¶åŸ¡ããåãã©ãããã©ãŒã ã§å¯èœãªéãæé«ã®ããã©ãŒãã³ã¹ã確ä¿ã§ããŸãã
- æ¡ä»¶ä»ãã³ã³ãã€ã«ïŒã¿ãŒã²ãããã©ãããã©ãŒã ãŸãã¯APIã«åºã¥ããŠã³ãŒããå«ãããé€å€ãããããããã«ãã·ã§ãŒããŒã³ãŒãã§ããªããã»ããµãã£ã¬ã¯ãã£ãïŒ#ifdefïŒã䜿çšããŸãã
ã·ã§ãŒããŒã®æªæ¥
ã·ã§ãŒããŒããã°ã©ãã³ã°ã®åéã¯åžžã«é²åããŠããŸããããã€ãã®æ°ãããã¬ã³ãã«ã¯ã次ã®ãããªãã®ããããŸãã
- ã¬ã€ãã¬ãŒã·ã³ã°ïŒã¬ã€ãã¬ãŒã·ã³ã°ã¯ãå ç·ã®çµè·¯ãã·ãã¥ã¬ãŒãããŠçŸå®çãªç»åãäœæããã¬ã³ããªã³ã°æè¡ã§ããã¬ã€ãã¬ãŒã·ã³ã°ã«ã¯ãã·ãŒã³å ã®ãªããžã§ã¯ããšã®å ç·ã®äº€å·®ãèšç®ããããã®ç¹æ®ãªã·ã§ãŒããŒãå¿ èŠã§ãããªã¢ã«ã¿ã€ã ã¬ã€ãã¬ãŒã·ã³ã°ã¯ãææ°ã®GPUã§ãŸããŸãäžè¬çã«ãªã£ãŠããŸãã
- ã³ã³ãã¥ãŒãã·ã§ãŒããŒïŒã³ã³ãã¥ãŒãã·ã§ãŒããŒã¯ãGPUã§å®è¡ãããç©çã·ãã¥ã¬ãŒã·ã§ã³ãç»ååŠçã人工ç¥èœãªã©ãæ±çšçãªèšç®ã«äœ¿çšã§ããããã°ã©ã ã§ãã
- ã¡ãã·ã¥ã·ã§ãŒããŒïŒã¡ãã·ã¥ã·ã§ãŒããŒã¯ãåŸæ¥ã®é ç¹ã·ã§ãŒããŒãããæè»ã§å¹ççãªæ¹æ³ã§ãžãªã¡ããªãåŠçããŸãããžãªã¡ããªãGPUã§çŽæ¥çæããã³æäœã§ããŸãã
- AIæèŒã·ã§ãŒããŒïŒæ©æ¢°åŠç¿ã䜿çšããŠããã¯ã¹ãã£ãã©ã€ãã£ã³ã°ããã®ä»ã®èŠèŠå¹æãèªåçã«çæã§ããAIæèŒã·ã§ãŒããŒãäœæããŠããŸãã
çµè«
é ç¹ã·ã§ãŒããŒãšãã©ã°ã¡ã³ãã·ã§ãŒããŒã¯ã3Dã¬ã³ããªã³ã°ãã€ãã©ã€ã³ã®äžå¯æ¬ ãªã³ã³ããŒãã³ãã§ãããéçºè ã«ãèŠäºã§ãªã¢ã«ãªããžã¥ã¢ã«ãäœæããåãæäŸããŸãããããã®ã·ã§ãŒããŒã®åœ¹å²ãšæ©èœãçè§£ããããšã«ããã3Dã¢ããªã±ãŒã·ã§ã³ã®å¹ åºãå¯èœæ§ãè§£ãæŸã€ããšãã§ããŸãããããªã²ãŒã ãç§åŠçèŠèŠåã建ç¯ã¬ã³ããªã³ã°ã®ããããéçºããå Žåã§ããé ç¹ã·ã§ãŒããŒãšãã©ã°ã¡ã³ãã·ã§ãŒããŒãç¿åŸããããšããç®çã®èŠèŠççµæãéæããããã®éµãšãªããŸãããã®ãã€ãããã¯ãªåéã§ã®ç¶ç¶çãªåŠç¿ãšå®éšã¯ãã³ã³ãã¥ãŒã¿ãŒã°ã©ãã£ãã¯ã¹ã«ããã驿°çã§ç»æçãªé²æ©ã«ã€ãªããããšã¯ééããããŸããã